package br.edu.faculdadeprojecao.mb;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;

import org.primefaces.context.RequestContext;

import br.edu.faculdadeprojecao.DAO.ProfessorDAO;
import br.edu.faculdadeprojecao.infra.JPAUtil;
import br.edu.faculdadeprojecao.modelo.Professor;
import br.edu.faculdadeprojecao.modelo.Usuario;
import br.edu.faculdadeprojecao.relatorio.GeraAulaProfessor;

@ViewScoped
@ManagedBean
public class ProfessorBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Professor professor = new Professor();
	private List<Professor> professores;
	private List<Professor> professoresFiltrados;

	public List<Professor> getProfessoresFiltrados() {
		return professoresFiltrados;
	}

	public void setProfessoresFiltrados(List<Professor> professoresFiltrados) {
		this.professoresFiltrados = professoresFiltrados;
	}

	public void limpar() {
		this.professor = new Professor();
		this.professores = null;
	}

	public Professor getProfessor() {
		return professor;
	}

	public void setProfessor(Professor professor) {
		this.professor = professor;
		System.out.println("Professor setado" + professor.getId());
	}

	public List<Professor> getProfessores() {

		if (professores == null) {
			EntityManager em = new JPAUtil().getEntityManager();
			ProfessorDAO dao = new ProfessorDAO(em);
			professores = dao.lista();
			em.close();
		}
		return professores;
	}

	public void setProfessores(List<Professor> professores) {
		this.professores = professores;
	}

	public void grava(Usuario usuario) {

		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			EntityManager em = new JPAUtil().getEntityManager();
			em.getTransaction().begin();
			ProfessorDAO dao = new ProfessorDAO(em);
			professor.setAtivo(true);
			professor.setUsuario(usuario);

			dao.salva(professor);

			em.getTransaction().commit();
			GeraAulaProfessor geraAulaProfessor = new GeraAulaProfessor();
			geraAulaProfessor.geraAulas(professor);

			limpar();

			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Gravado com sucesso", null);
		} catch (Exception e) {
			// TODO: handle exception
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Login Error",
					"Invalid credentials");
		}

			
		
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);

	}

	

	public void remove() {
		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();

		ProfessorDAO dao = new ProfessorDAO(em);

		dao.delete(dao.busca(this.professor.getId()));

		em.getTransaction().commit();

		em.close();
		limpar();
	}

	// public Professor busca(){

	// }

}
